<!doctype html>



  


<html class="theme-next pisces use-motion">
<head>
  <meta charset="UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"/>



<meta http-equiv="Cache-Control" content="no-transform" />
<meta http-equiv="Cache-Control" content="no-siteapp" />












  
  
  <link href="/vendors/fancybox/source/jquery.fancybox.css?v=2.1.5" rel="stylesheet" type="text/css" />




  
  
  
  

  
    
    
  

  

  

  

  

  
    
    
    <link href="//fonts.googleapis.com/css?family=Lato:300,300italic,400,400italic,700,700italic&subset=latin,latin-ext" rel="stylesheet" type="text/css">
  






<link href="/vendors/font-awesome/css/font-awesome.min.css?v=4.4.0" rel="stylesheet" type="text/css" />

<link href="/css/main.css?v=5.0.1" rel="stylesheet" type="text/css" />


  <meta name="keywords" content="王雨峰, 博客" />








  <link rel="shortcut icon" type="image/x-icon" href="/favicon.ico?v=5.0.1" />






<meta name="description" content="Alan Wang&apos;s personal blog.">
<meta property="og:type" content="website">
<meta property="og:title" content="王雨峰的博客">
<meta property="og:url" content="http://wangyufeng.org/page/3/index.html">
<meta property="og:site_name" content="王雨峰的博客">
<meta property="og:description" content="Alan Wang&apos;s personal blog.">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="王雨峰的博客">
<meta name="twitter:description" content="Alan Wang&apos;s personal blog.">



<script type="text/javascript" id="hexo.configuration">
  var NexT = window.NexT || {};
  var CONFIG = {
    scheme: 'Pisces',
    sidebar: {"position":"left","display":"post"},
    fancybox: true,
    motion: true,
    duoshuo: {
      userId: 0,
      author: '博主'
    }
  };
</script>




  <link rel="canonical" href="http://wangyufeng.org/page/3/"/>

  <title> 王雨峰的博客 </title>
</head>

<body itemscope itemtype="http://schema.org/WebPage" lang="zh-Hans">

  










  
  
    
  

  <div class="container one-collumn sidebar-position-left 
   page-home 
 ">
    <div class="headband"></div>

    <header id="header" class="header" itemscope itemtype="http://schema.org/WPHeader">
      <div class="header-inner"><div class="site-meta ">
  

  <div class="custom-logo-site-title">
    <a href="/"  class="brand" rel="start">
      <span class="logo-line-before"><i></i></span>
      <span class="site-title">王雨峰的博客</span>
      <span class="logo-line-after"><i></i></span>
    </a>
  </div>
  <p class="site-subtitle">随便写点东西，为互联网贡献一些比特~</p>
</div>

<div class="site-nav-toggle">
  <button>
    <span class="btn-bar"></span>
    <span class="btn-bar"></span>
    <span class="btn-bar"></span>
  </button>
</div>

<nav class="site-nav">
  

  
    <ul id="menu" class="menu">
      
        
        <li class="menu-item menu-item-home">
          <a href="/" rel="section">
            
              <i class="menu-item-icon fa fa-fw fa-home"></i> <br />
            
            首页
          </a>
        </li>
      
        
        <li class="menu-item menu-item-about">
          <a href="/about" rel="section">
            
              <i class="menu-item-icon fa fa-fw fa-user"></i> <br />
            
            关于
          </a>
        </li>
      
        
        <li class="menu-item menu-item-archives">
          <a href="/archives" rel="section">
            
              <i class="menu-item-icon fa fa-fw fa-archive"></i> <br />
            
            归档
          </a>
        </li>
      

      
    </ul>
  

  
</nav>

 </div>
    </header>

    <main id="main" class="main">
      <div class="main-inner">
        <div class="content-wrap">
          <div id="content" class="content">
            
  <section id="posts" class="posts-expand">
    
      

  
  

  
  
  

  <article class="post post-type-normal " itemscope itemtype="http://schema.org/Article">

    
      <header class="post-header">

        
        
          <h1 class="post-title" itemprop="name headline">
            
            
              
                
                <a class="post-title-link" href="/2015/09/15/Mountain/" itemprop="url">
                  Mountain
                </a>
              
            
          </h1>
        

        <div class="post-meta">
          <span class="post-time">
            <span class="post-meta-item-icon">
              <i class="fa fa-calendar-o"></i>
            </span>
            <span class="post-meta-item-text">发表于</span>
            <time itemprop="dateCreated" datetime="2015-09-15T12:29:54+08:00" content="2015-09-15">
              2015-09-15
            </time>
          </span>

          

          
            
          

          

          
          

          
        </div>
      </header>
    


    <div class="post-body" itemprop="articleBody">

      
      

      
        
          
            <p>山</p>
<p>不动的山</p>
<p>风雨来嬉戏，山变矮了</p>
<p>岩浆躁动着，山又变高了</p>
<p>一颗颗的树，根扎进了大山</p>
<p>一朵朵的云，欢快地飞过山尖</p>
<p>云会不会想</p>
<p>这是大山和我相距最近的时刻</p>
<p>再靠近我一点儿好不好?</p>
<hr>
<p>阳光载着低熵，将秩序赐予万物</p>
<p>阳光！你就是神，你就是意义，你就是存在</p>
<p>山脉为你隆起</p>
<p>川河为你流淌</p>
<p>物质说，我是能量的仆人</p>
<p>能量说，信息统领我的意志</p>
<p>数不尽的故事在山中传说</p>
<p>你可还记得于孤山之上展翅而飞的巨龙?</p>
<p>万事起，万事终</p>
<p>信息辗转沉浮</p>
<p>如是而已</p>
<hr>
<p>你注视着苍翠的大山，笼罩着迷雾</p>
<p>你似是听到了远方传来的上古传说</p>
<p>你抑制不住好奇之心，对那山问</p>
<p>你认得我们吗？</p>
<p>回答你：</p>
<p>不</p>
<p>我是大地的子民</p>
<p>我是阳光的孩子</p>
<p>我是时间的使者</p>
<p>我是那座山</p>
<p>不动的山</p>

          
        
      
    </div>

    <div>
      
    </div>

    <div>
      
    </div>

    <footer class="post-footer">
      

      

      
      
        <div class="post-eof"></div>
      
    </footer>
  </article>


    
      

  
  

  
  
  

  <article class="post post-type-normal " itemscope itemtype="http://schema.org/Article">

    
      <header class="post-header">

        
        
          <h1 class="post-title" itemprop="name headline">
            
            
              
                
                <a class="post-title-link" href="/2015/09/10/原、反、补码学习笔记/" itemprop="url">
                  数制，原反补码，浮点数学习笔记
                </a>
              
            
          </h1>
        

        <div class="post-meta">
          <span class="post-time">
            <span class="post-meta-item-icon">
              <i class="fa fa-calendar-o"></i>
            </span>
            <span class="post-meta-item-text">发表于</span>
            <time itemprop="dateCreated" datetime="2015-09-10T14:30:58+08:00" content="2015-09-10">
              2015-09-10
            </time>
          </span>

          

          
            
          

          

          
          

          
        </div>
      </header>
    


    <div class="post-body" itemprop="articleBody">

      
      

      
        
          
            <p>其实也不是笔记，我上课从来不记笔记，呃，懒。</p>
<p>结合参考资料，写一写我对这几天学习内容的想法。大家可选择性阅读。</p>
<p>有些东西是上课没说到的。</p>
<p>##010101</p>
<p>先从二进制说起。</p>
<p>####为什么计算机需要用二进制存储数据？</p>
<p>二进制中只有「0」和「1」。</p>
<p>计算机是通电的，那么在电的世界中，</p>
<p><img src="http://7xku3h.com1.z0.glb.clouddn.com/15-9-10/72692184.jpg" alt=""></p>
<p>没通电的的就是「0」，通电的就是「1」。</p>
<p>为什么是二进制呢？因为这种「无」和「有」的二元对立关系，是非常好实现的。试想，如果要造一个「十进制计算机」，那就要创造出一种能够表达10种状态的东西，还得能够对这10种状态进行准确的观察、计算，难度很大。「电」的特性正好满足二进制的需求。「高电平」就是1，「低电平」就是0。</p>
<p>你可能会问了，那电压有大有小的，为啥就只有0和1，不会出个0.5呢？</p>
<p>如果是计科的同学，咱们这学期在同时学的两门课「数电」（数字逻辑）和「模电」（电路设计），就和这相关。数电是抽象，把电路抽象成0和1，关注其中的逻辑部分，性质是离散的。而模电就是研究具体的电路，和实际世界关系紧密，性质是连续的。</p>
<p>如果说这是数字电路的话：</p>
<p><img src="http://7xku3h.com1.z0.glb.clouddn.com/15-9-10/88810670.jpg" alt=""></p>
<p>那这就是模拟电路：</p>
<p><img src="http://7xku3h.com1.z0.glb.clouddn.com/15-9-10/92889196.jpg" alt=""></p>
<p>##进制</p>
<p>一张很有意思的漫画：</p>
<p><img src="http://7xku3h.com1.z0.glb.clouddn.com/15-9-10/27697363.jpg" alt=""></p>
<p>收藏多年。很有意思。</p>
<p>人类之所以用十进制，很可能跟人类长了10跟手指头有关系。在计算机中，2进制-8进制-16进制的互换是很方便的。可以想象，如果人类进化出8根手指头，学习计算机的难度大概会大大降低。或者说，人类长了<code>2^n,n∈k</code>跟手指头。哈。</p>
<p>##为什么课本上的原码、反码和补码都是8位？<br>在计算机中，一位0或者1叫做一个<code>比特</code>，8个比特可组成一个<code>字节</code>。所以8位是很常用的。在C语言中，int型占用4个字节，也就是32位。double型占用8个字节，即64位。</p>
<p>书上都写成八位，大概是为了方便吧，毕竟8位的用途很广，最早的CPU也是8位的。课本上没说理由。</p>
<p>另外，不论是原、反、补码，最高位（最左边那位）都是符号位，1是负数，0是正数。也就是说具体的数值的部分，只能靠7位比特来实现。</p>
<p>##原、反、补码<br>大家在刚学C语言的时候，大概都会遇到一个现象，就是<code>溢出</code></p>
<p>比如我有<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">int n = 2147483647;</div></pre></td></tr></table></figure></p>
<p>这是int型能表达的最大值，这时我<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">n++; printf(n);</div></pre></td></tr></table></figure></p>
<p>这时候n显示的值是<code>-2147483648</code></p>
<p><strong>从最大值变成了最小值！</strong>发生了什么呢，从课堂上的内容就很好理解，因为<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">01111111111111111111111111111111 + 1 =</div></pre></td></tr></table></figure></p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">10000000000000000000000000000000</div></pre></td></tr></table></figure>
<p>最前面的1意味着这是一个负数。</p>
<p><em>到现在我也没太想清楚，一个范围内最小的这个数，补码是怎样被处理的。求指点。</em></p>
<hr>
<p>这里假定大家对原码、反码和补码的特征已经掌握了，那咱们来分别分析一下。</p>
<p>###原码</p>
<p>原码的最高位是符号位。其他位数表示数值。</p>
<p>在课上，咱们了解到原码有个缺点是<code>同时有+0和-0</code>，其实这还不是什么严重的问题。毕竟<code>-0</code>在计算机中是有用的，后面说到。</p>
<p>“绝对值相等的正数和负数”相加应该是<code>0</code>，但是在原码中<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">1+(-1) 即 0001 + 1001 = 1010</div></pre></td></tr></table></figure></p>
<p><code>1010</code>在原码中明显是<code>-2</code>. 正1和负1相加，得负2.</p>
<blockquote>
<p>坑爹啊，原码根本没法用。</p>
</blockquote>
<p>###反码</p>
<p>为了保证正负数相加得0，便采用了反码。</p>
<p>比如在四位的反码中<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">7 + 1 即 0111 + 0001 = 1000</div></pre></td></tr></table></figure></p>
<p>即<code>7 + 1 = -7</code></p>
<p>此时反码就已经有了”<em>表示范围内的最大的数+1，等于表示范围内的最小的数</em>“这一特征。(即溢出)</p>
<p>反码巧妙地解决了原码正负数相加不得零的问题。但是还有个遗留问题，就是<strong>仍然有正负两个0</strong>。</p>
<p>其实负0在某些情况下是有用的，在<code>Javascript</code>语言中就有负0.有时候，当一个负数特别特别接近零，以至于精度都不足以将它显示出来时，就表示为-0.以便和真正的0区分开来。</p>
<p>###补码<br>补码就是为了解决正负两个0的问题。</p>
<p>通俗来讲，补码就是在反码的基础上，把所有负数的表示范围减小了一格。例如原来能表示<code>-7 ~ -0</code>，现在就能表示<code>-8 ~ -1</code>，-0自然就没有了。</p>
<p>补码在”绝对值相等的正负数相加”这件事儿上，一定会产生一个<code>进位</code>，把<code>进位</code>舍弃后，结果即为0.</p>
<p>现在正1加负1就得0了，正确。</p>
<p>###溢出<br>溢出的本质现在就明白了。正是因为数字在计算机中全部以补码表示，而补码的特点就是会溢出。</p>
<p>其实别的语言还好，但C语言的设计思路就是「充分信任程序员」，所以C语言假定你很清楚「int型的最大值是2147483647」。呵呵。</p>
<p>##再论补码</p>
<p>理论上，补码的学名是<code>2的补码</code>或<code>2的补数</code>，即「Two’s Complement」.</p>
<p>重温一下，补码的转换方式是</p>
<ol>
<li>各位取反</li>
<li>加1</li>
</ol>
<p>其实对于计算机来说，采用什么码都可以，比如咱们今天上课讲到「BCD码」，BCD码中竟然就有「8421码」、「2421码」、「余3码」等等等等种类。只要能在数字和编码之间，形成一一对应的关系即可。但不同种类的编码自然有不同的特点。为什么补码用来表示计算机中的一切数字呢？</p>
<p>根据查到的资料来看，补码的优点之一是：<strong>如果使用补码，那么所有的加法都可以用一种电路完成。</strong></p>
<p>老师在课上提到，在计算机中，减法会被归约为加法。比如</p>
<p>$$<br>5 - 3 → 5 + (-3)<br>$$</p>
<p>而原码就没法做这种规约，如果使用原码的话，加法是一套电路（加法器），还需要专门实现一套「减法器」。</p>
<p>##定点数和浮点数<br>似乎课上对于这两样东西只是一带而过，这里简单提一提。</p>
<p>定点数：小数点是固定的(即位置是默认的)。比如说银行存款的系统，就适合用定点数来表示，因为存款的话，需要在计算机中储存的数字，都是只有小数点后两位（100,000.00￥）。定点数中，小数点的位置是由硬件/软件固定好的。</p>
<p>浮点数：就是咱们在计算机中常用的用来储存小数的方法。float和double都算是浮点数。</p>
<p>咱们学过科学计数法。浮点数的实现依托于科学计数法。咱们来分析一下<code>double型</code>。</p>
<p>double的学名是<code>双精度浮点数</code>。前面提到，double型占用8个字节，即64位。那这64位都是干啥的呢？</p>
<p>位数的分配如下：</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">s = 1 位符号位 | e = 11 位指数位 | f = 52位有效数字</div></pre></td></tr></table></figure>
<p>它形如<br>$$<br>(-1)^s*1.f*2^{e-1023}<br>$$</p>
<p>为什么最左边是-1的s次方呢？因为<code>s=0</code>的话，该数就是正数，如果s = 1的话，改数就是负数。<strong>这就是「最高位符号位」的实现原理</strong>。巧妙吧。</p>
<p>那个1023是偏移量，跟无符号数转为有符号数有关(即把一半的表示范围分给负数部分)。</p>
<p>细节就略过了，反正我也不懂。符号位即是管正负的。指数为决定了小数点的位置，所以叫<strong>浮点数</strong>。就好比是科学计数法中，e后边的数字。表示这个纯小数乘10的多少次方。每乘一个10，小数点向左浮动一位。反之亦然。</p>
<p>大家知道，电脑中有两个重要的部件，分别是「CPU」和「GPU」。GPU也即显卡的核心芯片。那为什么GPU用来运算图形就特别快，而CPU就无法胜任呢？因为<strong>GPU是专门用来计算浮点数的</strong>。而计算机要想显示出图形来，就需要运算大量的浮点数。为啥GPU算浮点数就快呢？大概跟硬件层面上的设计和指令集有关系吧，毕竟术业有专攻。</p>
<p>现在挖比特币，超级计算机阵列等等，都大量使用GPU，因为这些任务都对浮点数的运算有高要求。</p>
<p>##拓展阅读：</p>
<p>说一下浮点数的形式中的<code>f</code>和<code>e</code>。</p>
<p>在<code>Javascript</code>这门语言中，根本就没有整数，一切数字都是用浮点数表示的。在Javascript中，除了普通的数字，还有NaN，+Infinity，-Infinity。</p>
<p>参考上方的「double型浮点数的形式」，在Javascript中有如下处理：</p>
<ul>
<li>当 e = 0 且 f = 0 时，该数为0；</li>
<li>当 e = 255 且 f = 0 时，该数为±Infinity(正负无穷)，具体的正负值由s决定。</li>
<li>当 e = 255 且 f ≠ 0 时，该数位NaN(Not a Number)。即「不是一个数」。比如除数为0时，结果就是NaN。</li>
</ul>
<p>计算机的电路很原始的，大概只能算算加法，做做位运算。什么乘啊除啊都没法直接做，更遑论那些函数啥的了。但计算机毕竟是离散的，而且也是不嫌烦的。比如说要计算正弦函数，对<code>Sin(x)</code>进行泰勒展开，有<br>$$<br>sin(x)=x-x^3/3!+x^5/5!-x^7/7!+……<br>$$<br>大约只需要展开六七项，精度就可以满足double类型的精度了。</p>
<p>别问我泰勒展开是啥，我不会（泪目）。大一的同学们，且听我一言：</p>
<p><strong>请一定要好好学高等数学。和一切数学。</strong></p>
<hr>
<blockquote>
<p>参考资料</p>
<p>〔1〕赵岩 . C语言点滴 . 人民邮电出版社, P58</p>
<p>〔2〕Charles Petzold . CODE . 电子工业出版社, P365</p>
<p>〔3〕贾熹滨等 . 数字逻辑基础与Verilog硬件描述语言 . 清华大学出版社, P9</p>
</blockquote>

          
        
      
    </div>

    <div>
      
    </div>

    <div>
      
    </div>

    <footer class="post-footer">
      

      

      
      
        <div class="post-eof"></div>
      
    </footer>
  </article>


    
      

  
  

  
  
  

  <article class="post post-type-normal " itemscope itemtype="http://schema.org/Article">

    
      <header class="post-header">

        
        
          <h1 class="post-title" itemprop="name headline">
            
            
              
                
                <a class="post-title-link" href="/2015/09/09/programming-guide-for-freshman-3/" itemprop="url">
                  计算机专业新生指南(之三)
                </a>
              
            
          </h1>
        

        <div class="post-meta">
          <span class="post-time">
            <span class="post-meta-item-icon">
              <i class="fa fa-calendar-o"></i>
            </span>
            <span class="post-meta-item-text">发表于</span>
            <time itemprop="dateCreated" datetime="2015-09-09T16:35:26+08:00" content="2015-09-09">
              2015-09-09
            </time>
          </span>

          

          
            
          

          

          
          

          
        </div>
      </header>
    


    <div class="post-body" itemprop="articleBody">

      
      

      
        
          
            <p>咱们上回说到了编程用的IDE，以及推荐VS2015的理由。</p>
<p>今日话题：</p>
<ul>
<li>计算机专业到底学啥？</li>
</ul>
<p>我也不是毕业多年的老专家，只是普通的学生之一，所以对「计算机专业学什么」这一问题，也只能是管中窥豹，如果有说的不妥当的，还请多见谅。我写出的是我一年的学习过程中思考的产物，没经历过的事情我就不瞎扯了。</p>
<p>##计算机专业的课程</p>
<p>「培养方案」是个挺有意思的东西，一般作为一张Excel表格存在。辅导员会发给大家。</p>
<p>这张「培养方案」列出了你大学四年需要上什么课，以及课的学分、性质、学分等等。如果想搞明白这门专业到底学啥，有个很简单的方法——把每一门课都在百度查一遍。也可以通过观察课程的学分多少，大致揣摩不同课程的重要程度。</p>
<p>计算机院同学今年的新同学们，如果是「计算机类」的话，也许没有完整四年的培养方案，不过和之前的培养方案都大同小异，虽然你们的总学时减少了，但计算机专业的核心课程是不会变的。可以找往年计算机科学与技术、信息安全或物联网专业的培养方案作为参考。</p>
<p>大家不用着急，虽然咱们都是计算机专业的学生，但专业的「核心课程」在大二下、大三上才开始密集展开，前一年半，学的都是些基础课程。我将这些基础性课程分类三类：</p>
<ul>
<li>通识的</li>
<li>偏数学的</li>
<li>偏计算机的</li>
</ul>
<p>####通识的<br>什么是通识课呢？英语、体育等。</p>
<p>英语建议好好学，请稳住英语水平过快下降的势头（三阶导数，233）。从功利的角度讲，早过四级没啥坏处。对于计算机专业，英语阅读能力也很重要。大一也许还不觉得，但当你深入专业的学习时，许多信息、资料都以英文形式存在、计算机上很多软件对中文的支持比较渣、在某种软件的官方查文档时也都是英文。</p>
<p>英语不用担心，我觉得有意识地稍微背背单词就好，保持对英语还算有点感觉。</p>
<p>关于体育，一本书的名字说明一切：《程序员健康指南》。各大网上书店有卖。</p>
<p>####偏数学的<br>作为一枚纯学渣，我本是没有资格讨论数学课的…权当我发出学渣的呼声吧。</p>
<p>我不清楚你们还学不学「线性代数」了，当时我们学线性代数，整个人都不太好了。正巧赶上我们那位老师，对我们清不清楚线性代数和计算机专业有什么关系一点也不在乎，第一节课撸起袖子就开始讲“行列式”了。所以我们都是在迷茫中度过的线性代数的学习。</p>
<p><strong>线性代数放在大一上学期很不合理。</strong>对计算机专业来说，这其实是一门重要的数学。别的我不清楚，只说在计算机图形学领域，满地都是线性代数。什么是图形学呢？比如如果大家对做游戏感兴趣的话，那就得和图形学打交道。</p>
<p>其实，每一门数学课都有它存在的意义，哪怕是无法直接应用在计算机专业中。比如「高等数学」，从功利的角度讲，学好微积分，对你的「大学物理」大有裨益。从情怀的角度讲，「高数」训练你的数学思维和能力，灵活咱们的大脑，好让咱们对将来复杂度更高的知识结构学起来更加轻松。【以上这段文字不代表个人内心的真实观点】</p>
<p>「离散数学」更是计算机专业的根基。我很感谢我们这学期的各门课程的老师，都对本门课程和计算机专业的关系进行了一定篇幅的介绍。</p>
<p>说句官话：这些数学课程所培养的抽象思维能力，决定了你在计算机专业学习者的队伍中的位次。某大青鸟这些机构，每年也能培养出许多许多的程序员。那你也许会问，既然他们出来就能拿万八千的工资，那我为何还要在大学读计算机呢？区别就在于基础性质的知识有无。这些知识也许我们终将遗忘，但思考的方式和习惯却能<strong>内化</strong>到我们的大脑中。那些培训班出来的人，所掌握的技能都是空中楼阁，一旦技术改朝换代，他们就将被替代。但技术无论怎样更迭，其核心的脉络都是不变的。在（核心知识的稳定性）这点上，大概计算机科学和其他任何理工科学科都差不多。</p>
<p>数学，如果你喜欢，那真是莫大的幸福。如果你不喜欢，也请好好做作业。事实证明，只要作业都做了，多多少少也能受到一定程度的训练。如果是完全凭期末突击的话，甚是可惜，这门课就真的是浪费掉了。如果某人脑袋还没那么灵，说不定就挂科了。</p>
<p>有句老话：学习数学和计算机专业的基础课程，就像是在修炼「内功」，内功强大了，什么招式学的都快，理解得也透彻。好比开车，谁也没要求开车上路的人一定要知道发动机、离合器等东西是怎样一回事，但是如果略对其原理有所了解，一定能更好地驾驭汽车。</p>
<p>[唉]，一声叹息。我一定要好好学数学【严肃脸】。</p>
<p>####偏计算机的<br>大一比如有C语言，C语言课程设计，Java语言；到了大二还有数电、数据结构与算法之类的。</p>
<p>简而言之，如果你用心学这些课，那自然会迈入一个更加广阔的世界。</p>
<p>如果你对这些课程没感觉，甚至抵触，也请一定要跟好进度。一种经常发生的情况是：遇到一个大的挫折，反复折腾也弄不好，于是就放弃了对这门课的学期热情。这很常见。请多跟身边的学霸交流，报好学霸大腿，暂且不论平时能有什么收获，到了期末也能让你好过很多。</p>
<p>学习编程的建议在系列之一已经提到过了，如果只强调两条，我想说的是</p>
<ul>
<li>多敲代码</li>
<li>多想</li>
</ul>
<p>把书上的代码手动打到键盘上，是学习编程的好方法。</p>
<p>C语言中有些东西比较抽象，比如「二维数组」（不重要），「指针」（重要）等。平时没事儿了多想想，慢慢地就理清楚了，如果只靠每周上课的那几个小时，也许会想不清楚。</p>
<p>另外还有个事儿，就是很多对计算机感兴趣的同学，很早就会接触到技术上的东西，能做出个软件/网页/游戏啥的。如果你是这样的人，那恭喜你。在我看来，能用计算机去创造什么东西的人，一定是享受这个过程的。如果你不是，看到了你身边的大神同学，请也别慌张，毕竟大家时间上的分配是不同的。咱们在大学里，时间相当充裕，用来学基础课的时间很多，不着急，闻道有先后而已。最低标准是跟紧课程标准，在搞定培养方案的要求后，再用自己的余力去探索计算机的世界。看书也好，做东西也好，都是收获。</p>
<hr>
<p>另外提一个有意思的事儿，计算机专业之所以能作为一个「专业」，其理论依据是ACM和IEEE/CS共同推出的《计算作为一门学科》的报告。其对「计算学科」的定义是：</p>
<blockquote>
<p>计算学科是对描述和变换信息的算法过程的系统研究，包括它的理论、分析、设计、有效性、实现和应用。</p>
</blockquote>
<p>虽然「计算学科」和「计算机专业」还是有所区别，毕竟咱们学习的内容中「工程」的东西更多一些，但是这个定义还是挺有意思的，大家感受下。</p>
<p>在咱们计算机院，不管是哪个专业，其核心的课程都可以用「计算机科学与技术」中的课程作为代表。「科学」就是科学的意思，「技术」可以类比工程。还有一句话也挺有意思：</p>
<blockquote>
<p>科学家研究已有的世界，工程师创造未来的世界。</p>
</blockquote>
<hr>
<p>题外话。另外我想说，学习计算机专业，并不意味着你就要成为「计算机科学家」、「IT从业者」、「码农」等等。学习计算机专业，就像很多其他专业一样，同样是一种手段，目的是让你感受美、幸福与平静。退一步讲，这也是我们生活在这发达的文明社会中的一种意义之一。然而有些理想是那么遥远，那本来是你的梦，然而当你反复跟别人讲述这梦时，你却慢慢遗忘了梦的本身，最终只记住了你对梦的描述。也没关系，「不忘初心」这句话对于我们来说不太适用，毕竟到了大学，三观难免一天一变呢。共勉吧，亲爱的朋友，祝我们学习顺利。</p>
<p>是以为系列之三。</p>
<p>下期咱们聊「如果我不喜欢计算机专业该怎么办？」</p>

          
        
      
    </div>

    <div>
      
    </div>

    <div>
      
    </div>

    <footer class="post-footer">
      

      

      
      
        <div class="post-eof"></div>
      
    </footer>
  </article>


    
      

  
  

  
  
  

  <article class="post post-type-normal " itemscope itemtype="http://schema.org/Article">

    
      <header class="post-header">

        
        
          <h1 class="post-title" itemprop="name headline">
            
            
              
                
                <a class="post-title-link" href="/2015/09/07/programming-guide-for-freshman-2/" itemprop="url">
                  计算机专业新生指南(之二)
                </a>
              
            
          </h1>
        

        <div class="post-meta">
          <span class="post-time">
            <span class="post-meta-item-icon">
              <i class="fa fa-calendar-o"></i>
            </span>
            <span class="post-meta-item-text">发表于</span>
            <time itemprop="dateCreated" datetime="2015-09-07T19:43:01+08:00" content="2015-09-07">
              2015-09-07
            </time>
          </span>

          

          
            
          

          

          
          

          
        </div>
      </header>
    


    <div class="post-body" itemprop="articleBody">

      
      

      
        
          
            <p>大家也都听说过了，计算机专业需要用到电脑，主要的需求就是「编程」。上期中，我们聊了聊编程大概是怎样一回事，给出了一些学习C语言的建议。</p>
<p>这期我们来说说「编程」这一活动需要用到的软件。</p>
<p>##先给结论<br>推荐：<strong>Visual Studio 2015 Community</strong></p>
<p>原因后面细说。如果不想看文字，只想要适合学习编程的软件，去下载这个就好。百度即可。</p>
<p>如果您有其他推荐，欢迎来探讨。</p>
<p>##什么是编程用的软件？<br>上期文章提到，不同的编程语言就像是不同种类的工具。对于一个工匠来说，他有了工具还不够，还需要有一个用于工作的「工作台」。此时，「工作台」这个概念就有点像「进行编程需要用到的软件」，或叫做「编程工具」。</p>
<p>编程用的软件，就像工具台一样，给你提供了一个平台，提供了写代码的白纸、帮助你查代码错误的工具、把你写好的代码翻译成机器语言的工具，等等。对于我们这些学习者来说，想要学习编程，就需要用到「编程用的软件」。</p>
<p>在咱们这个专业，「编程用的软件」有个专业名词，叫「集成开发环境」，英文简写「IDE」。大家今后再说任何编程软件，叫他「IDE」就好。读音「爱-地-意」。</p>
<p>本期介绍的软件都主要运行在Windows系统上。如果有买Mac的同学——相信以你的觉悟水平，也不需要看本篇文章了。顺带一提，Xcode是OS X系统上非常好用的IDE。</p>
<p>##都有什么种类的「IDE」？</p>
<p>大家在第一次上机时，老师也许会为大家讲解相关知识，但根据学长们的回忆，老师讲的也许不甚详细。大家稀里糊涂的，慢慢就明白了。大家读这系列的文章时，也许也会觉得不明觉厉，但随着你学习的深入，慢慢都会豁然开朗。希望这些文字，能对你打地基的过程提供些许微薄的帮助。</p>
<p>在上机时，机房中所安装的「IDE」，也基本上就是C语言编程常用的「IDE」。例如：</p>
<ul>
<li>VC6.0</li>
<li>VS2010</li>
<li>Dev-C++</li>
<li>Code::Blocks</li>
</ul>
<p>下面对他们做个简单的介绍。</p>
<p>####VC6.0<br><em>很可能</em>是老师演示时用的IDE。全称是Visual C++ 6.0。这是微软公司的一款软件，是一度非常流行的C语言和C++语言的开发平台。</p>
<blockquote>
<p>大家可能会感到疑惑，这软件的名字里明明有个「C++」，为什么用来学习C语言呢？原因如下：从历史来看，是先有C语言，再有的C++语言。C++语言是以C语言为核心的一种编程语言（从名字也能看出来）。C++在设计时，完全「向下兼容」C语言。意思是，C语言的一切东西，都包含在C++中了。所以在任意C++语言的开发平台，都可以学习/开发C语言。用比较学究的话说，C++是C语言的「超集」（类比「子集」）。</p>
</blockquote>
<p><strong>不太推荐使用VC6.0。</strong>因为这款软件已经很老了，恐怕只有大学的计算机系中才安装着这么多VC6.0。为什么呢？因为计算机这个学科的技术更迭是很快速的，一种软件可能几年时间、甚至几个月时间就过时了，但大学中的知识也好，还是机房中的软件也好，更新速度都是较慢的。</p>
<p>还有一个原因，就是老师教课可能都教很多年了，他已经习惯于用VC6.0.</p>
<p>##VS2010<br>VS2012的全称是「Visual Studio 2010」，其实这是一个大大大大工具包，里面的内容包罗万象，其中有一个部分，叫做「Visual C++ 2010」。从名字可以看出，这是VC6.0的后续版本。但我们出于习惯，都把VC6.0之后的版本叫做VS。例如VS2008、VS2012、VS2015.知行楼的机房一般安装的是VS2010.</p>
<p>我推荐的版本是VS2015 Community。为什么？</p>
<ul>
<li>好用</li>
<li>免费</li>
</ul>
<p>好用是真的。VS系列可能是Windows平台上，乃至C++开发的最佳IDE。对于我们这些学习者来说，VS的「调试功能」是非常好使的。对于「调试」，今天不做展开，但大家将来要做「C语言课程设计」，如果没有好用的调试手段，那将是非常痛苦的。</p>
<p>为什么说免费？「Community」意味着这是一个「社区版」，面向给学生、个人开发者免费使用。既然是免费，那么功能肯定有所精简，但对于我们这些学习者来说也是绰绰有余了。VS的旗舰版本是「Ultimate」，如果要买的话，恐怕得好几千<em>美元</em>吧。</p>
<blockquote>
<p>网上的破解版当然很多，但是在力所能及的情况下，我还是推荐大家使用正版（免费的Community版本就属于正版）。毕竟大家学的是计算机，将来说不定就进了计算机行业。我相信人品守恒、因果报应。当然，我的电脑里也正用着盗版软件，活了这么大也用了无数盗版的软件和游戏，我希望在将来，只要是我的财力允许，我会尽量去使用正版软件。我大力支持开源软件，但同时我也认为商业的软件应当受到法律的保护。</p>
</blockquote>
<p>其实工大也为我们购买了正版授权，在ca.bjut.edu.cn可下载(内网)。</p>
<p>##Dev-C++<br>编程竞赛中经常用到的软件。用起来挺方便，但是调试功能很弱，稳定性也不好。不推荐学习时长期使用。</p>
<p>##Code::Blocks<br>和Dev-C++类似，但比前者功能更多。但(通常情况下)他们的编译器都是gcc.所以对于我们学生来说差不多。如果感兴趣的话，不妨安装一个作为备用。</p>
<p>##VS2015的具体使用方法和参考教材<br>下期见。</p>

          
        
      
    </div>

    <div>
      
    </div>

    <div>
      
    </div>

    <footer class="post-footer">
      

      

      
      
        <div class="post-eof"></div>
      
    </footer>
  </article>


    
      

  
  

  
  
  

  <article class="post post-type-normal " itemscope itemtype="http://schema.org/Article">

    
      <header class="post-header">

        
        
          <h1 class="post-title" itemprop="name headline">
            
            
              
                
                <a class="post-title-link" href="/2015/09/05/tools-for-programming/" itemprop="url">
                  计算机专业大一新生指南(之一)
                </a>
              
            
          </h1>
        

        <div class="post-meta">
          <span class="post-time">
            <span class="post-meta-item-icon">
              <i class="fa fa-calendar-o"></i>
            </span>
            <span class="post-meta-item-text">发表于</span>
            <time itemprop="dateCreated" datetime="2015-09-05T18:47:48+08:00" content="2015-09-05">
              2015-09-05
            </time>
          </span>

          

          
            
          

          

          
          

          
        </div>
      </header>
    


    <div class="post-body" itemprop="articleBody">

      
      

      
        
          
            <p>##本期内容</p>
<ul>
<li>什么是编程</li>
<li>将要学习的 C 语言</li>
</ul>
<p>还要连载许多期。欢迎各位新同学们关注，衷心希望这些文字能帮到大家。_(:з」∠)_</p>
<p>为了节省时间，我就不配图了，还望大家体谅。我尽力确保文字中没有大段废话。</p>
<p>##什么是编程？<br>如果你是一位新同学，你也许会对「编程」这一词汇感到陌生。可以这样理解：编程的人就像是工匠，工匠用手中的工具，把最基本的木块、钉子、胶水、电线等等事物结合在一起，组成更大、更复杂的东西，譬如钟表、汽车、机器人。编程，是在计算机的世界中完成这种「组合」的工作。此时，那些「最基本的元素」，就是编程语言的语法，或一行行的代码。</p>
<p>或者说编程，就是操控计算机，让计算机发挥它的优势，去干一些人类干不好的事儿。人类相互之间能听懂彼此的指令，但计算机听不懂我们说的话，所以需要「编程」。编程，就像是在用计算机的语言，跟计算机说话。</p>
<p>不同的工匠用不同的工具，有些人喜欢用传统的手工锯子、有些人喜欢电锯；有些人需要用锤子钉钉子、有些人需要用钉枪。这些不同的工具，有着不同的属性和特点，各自有各自的优劣和适用范围。类比到计算机的世界中，「不同的工具」就好比是不同的编程语言。</p>
<p>编程语言多种多样，如今仍常用的编程语言就有数十种之多。但有为数不多的寥寥几种编程语言，历经大浪淘沙，成为了计算机行业中主流的语言。例如 C / C++ / Python / Java / JavaScript / C# / PHP。我们大一要学习的（以及大多数工科专业的同学都要学习的）便是 C 语言。</p>
<p>#将要学习的C语言</p>
<p>C 语言很古老，已经有 40 多年的历史了。学 C 语言，尤其是入门，是个并不愉快，甚至痛苦的过程。但请放心，在编程的世界中，已经有了很多自动化的工具（好比是电锯、机器人、友善的人机交互），但是 C 语言呢，就像是用锤子敲钉子，一不小心就敲到手；没有机器人帮你干活，你得一块一块砖头去搬；人机交互并不友善，因为 C 语言设计的时候，是给专业人员设计的，而不是学习者。</p>
<p>但我们为什么还要学习 C 语言？在我看来，<em> C 语言是我们作为计算机专业的学习者所必须要去学习的</em>。至于学习它的好处，在学习的过程中我们会慢慢感受到，尤其是在后续学习其他编程语言时。将来的连载中，咱们也展开再说好处的事儿。</p>
<blockquote>
<p>上面提到的六种「主流编程语言」，除了 C 本身，另外五种编程语言，都叫做”类C”语言。也就是说，他们的风格都是类似于C语言的，可见 C 语言影响力之大。</p>
</blockquote>
<p>在此分享给大家一些学习 C 语言的建议：</p>
<ul>
<li>不用过于抠 C 语言的语法细节。</li>
<li>保证学习时的思路清晰，尤其是后期学到「指针」「链表」的时候。没事儿的时候多想想。</li>
<li>认真<strong>独自</strong>完成课后习题。并不是每道题都是好题，难度也不甚妥当，但独立完成是起步时的必经之路。如果实在做不出来，<strong>先讨论，讨论不出来再看代码</strong>。</li>
<li>将教材上的代码往电脑上敲一敲，效果非常好。就好比学英语，大家都肯定朗读的效果。在编程领域中，「敲代码」就好比是传统语言学习中的「开口说话」。</li>
<li>教材的质量是很一般的。建议选择一本口碑良好的经典C语言教材。（后续会有推荐）。</li>
<li><strong>敢于质疑</strong>。同学说的不一定对，老师说的也不一定对，教材说的更不一定对。实践出真知。</li>
<li>学习C语言时善于使用网络资源。优秀的人、信息、知识在互联网上遍地都是。</li>
<li>续上条：你遇到的问题，有99.99%的可能性是别人已经遇到过了。所以多百度。</li>
</ul>
<hr>
<p>下期见。欢迎加作者QQ/微信 807103724，和他闲扯。</p>

          
        
      
    </div>

    <div>
      
    </div>

    <div>
      
    </div>

    <footer class="post-footer">
      

      

      
      
        <div class="post-eof"></div>
      
    </footer>
  </article>


    
      

  
  

  
  
  

  <article class="post post-type-normal " itemscope itemtype="http://schema.org/Article">

    
      <header class="post-header">

        
        
          <h1 class="post-title" itemprop="name headline">
            
            
              
                
                <a class="post-title-link" href="/2015/08/25/yu-yan-shi-fen-bu-shi-xi-tong/" itemprop="url">
                  语言是分布式系统吗？
                </a>
              
            
          </h1>
        

        <div class="post-meta">
          <span class="post-time">
            <span class="post-meta-item-icon">
              <i class="fa fa-calendar-o"></i>
            </span>
            <span class="post-meta-item-text">发表于</span>
            <time itemprop="dateCreated" datetime="2015-08-25T15:16:49+08:00" content="2015-08-25">
              2015-08-25
            </time>
          </span>

          
            <span class="post-category" >
              &nbsp; | &nbsp;
              <span class="post-meta-item-icon">
                <i class="fa fa-folder-o"></i>
              </span>
              <span class="post-meta-item-text">分类于</span>
              
                <span itemprop="about" itemscope itemtype="https://schema.org/Thing">
                  <a href="/categories/随感/" itemprop="url" rel="index">
                    <span itemprop="name">随感</span>
                  </a>
                </span>

                
                

              
            </span>
          

          
            
          

          

          
          

          
        </div>
      </header>
    


    <div class="post-body" itemprop="articleBody">

      
      

      
        
          
            <p><em>标题中的语言指「生活中用的语言」，不是编程语言。</em></p>
<p>下面想说的话都是一时兴起，有思考不完善的地方，还望探讨。</p>
<p>一些随感。</p>
<p>##起因<br>今天在骑车途径垡头，路旁有很多五金店，其中一个招牌写着「批发肯德基门」。一时觉得莫名其妙，想明白是啥意思后觉得莫名的喜感。肯德基门，就是那种对开的门呗。</p>
<p>我回顾了一下大脑思考的过程：</p>
<ol>
<li>我将这句话分成了三个部分「批发」、「肯德基」、「门」</li>
<li>首先，我在<strong>大脑中搜索</strong>「批发」这个词的意义，我意识到「批发」意味着大量出货，价格便宜；再搜索「肯德基」和「门」，因为我吃过肯德基，所以我知道「肯德基的门」是什么东西。</li>
<li>然后，将搜索到的意义代回到整个句子，乃至整个语境中。这里的语境，是指这个招牌身处五金店密布的地方，也可以理解为上下文。</li>
<li>现在，我明确理解了这个招牌想要表达的意义。</li>
</ol>
<p>注意，这丰富的意义是我的大脑，对这简单的六个字进行加工后得出的结果。意义中包含的信息量是非常大的。<br>比如我意识到了：</p>
<ul>
<li>这家店做肯德基的那种门（我在脑海中脑补，对开门，厚重，只能推或者拉）</li>
<li>可以批发，便宜，有价格的优势</li>
<li>如果我需要这种门的话，我就可以进入这家店和老板洽谈</li>
<li>424宿舍需要这种门吗？不需要。所以我走了</li>
</ul>
<p>只是开玩笑，我当时肯定想不了这么多。但我相信我的潜意识做了这些工作。</p>
<p>而在招牌上，有的仅仅是这6个汉字。</p>
<p>可以想到，任何一个能正常思考的人类，路过这块招牌时，都能通过思维活动，取得丰富的意义。这家店的老板，通过一块简单的招牌，向路人展现了丰富的信息量。</p>
<p>为什么说丰富？比如有一块招牌上书「蒋鹿纽捌痪目」，这必然信息量极低。因为这是从GB2312字符集中随机选出的6个汉字。</p>
<p>##进一步<br>进一步可以想到，<strong>这种「大脑对简单信息强大的加工处理功能」是人类文明的基石</strong>。</p>
<p>而这种能力，关键在于人类的大脑拥有</p>
<ul>
<li>强大的储存能力(相对)</li>
<li>强大的获取「上下文」（或「语境」）的能力</li>
</ul>
<p>在这里，我们做一个简化，把这两种能力合并，即人类的大脑拥有强大的</p>
<ul>
<li>依托自身<strong>储存的信息</strong>和<strong>运算能力</strong>，对信息进行处理和展开的能力</li>
</ul>
<p>考虑到我们人类有如此如此多，而除了极少数情况，人类的大脑的这一能力水平都是相近的。这一致性是由基因决定的。而地球上有几十亿颗大脑，他们对语言这一信息系统有着强大的储存、处理、加工、传播的能力。</p>
<p>像不像分布式系统？</p>
<p>##什么是分布式系统？<br>我也不知道。没系统学过。我试着举几个例子，表达我对分布式的理解：</p>
<ul>
<li>投资</li>
<li>税收</li>
<li>藏富于民</li>
<li>个体权利</li>
<li>版本管理软件</li>
</ul>
<p>注：我讨论广义的<em>分布式系统</em>，而不是抠工程上的定义。</p>
<p>####投资</p>
<blockquote>
<p>鸡蛋不要放在同一个篮子里</p>
</blockquote>
<p>一句耳熟能详的话。</p>
<p>####税收<br>比如个人所得税，国家从每个个体都收一些税，总量很大。</p>
<p>####藏富于民</p>
<blockquote>
<p>“百姓足，君孰与不足；百姓不足，君孰与足”</p>
</blockquote>
<p>####个体权利</p>
<ul>
<li>分布式的反面：斯大林治下的苏联</li>
<li>分布式：乌托邦</li>
</ul>
<p>###版本管理软件<br>上面都是瞎扯，终于说点有用的了。</p>
<p>这是分布式的反面，或者叫集中式：（图1）<br><img src="http://7xku3h.com1.z0.glb.clouddn.com/15-8-25/28696869.jpg" alt=""></p>
<p>分布式大概就是这样：（图2）<br><img src="http://7xku3h.com1.z0.glb.clouddn.com/15-8-25/24990293.jpg" alt=""></p>
<p>什么是版本管理工具呢？能像时光机一样，任意回到你的代码或者文件的之前版本，也为很多人同时干一个项目提供了方便。</p>
<p>SVN是一种比较古老的版本管理技术，这项技术的关键在于它需要一个中央服务器。如图1。也就是所有人的数据都得传到这个中央服务器中，一旦这台服务器挂了，所有人就都可以休息了。</p>
<p>在计算机发展的早期，工作的方式也是集中式。</p>
<blockquote>
<p>举例：1970年代，一家美国的大银行需要引入计算机系统，那么他们就找IBM公司，购入一台大型机+20台终端。这些终端是分配到职员手里的，但是终端没什么计算能力，基本上只有一个显示器。这些终端接入到同一台大型机中，这台大型机用给CPU「分时」的手段，为每台终端轮流分配计算时间（速度非常快）。因为每个人的工作量都不大，也就处理处理文字什么的，所以根本感觉不出来自己是用了大型机的全部计算能力，还是1/20的计算能力。</p>
</blockquote>
<p>八卦：</p>
<blockquote>
<p>随着历史的前进，出现了一个名为Git的分布式版本管理工具。Git是怎么来的呢？</p>
<p>最早，Linux的代码都是由Linux之父Linus一个人手工处理的。全世界的程序员提交补丁，Linus手工合并。后来工作量太大了，团队撑不住了，就找了家公司合作，免费用那家公司的版本管理工具，叫做BitKeeper。Linux嘛，大型工程，代码多，开发人员多，结构复杂，所以一般的工具还真没法胜任，说明这家公司有两把刷子。</p>
<p>矛盾随之而来。BitKeeper是商业软件（虽然免费给Linux社区使用），而Linux可是自由软件啊。一国两制？Linux社区里有人矫情，就是不干，充分说明他们没能领悟到邓公的智慧。最终他们不欢而散。那Linus就想了，那版本管理怎么办啊？</p>
<p>Linus用两周时间，用C语言自己写了个版本管理工具，起名叫Git。一个月后Linux的源码就全部迁移到Git上了。</p>
<p>大家感受下。</p>
</blockquote>
<p>Git的设计思路就是分布式。如上边的图2。</p>
<p>也就是说把所有的鸡蛋平摊到所有的篮子里。而且鸡蛋还是复制出来的。也就是说，一个20人的团队，就算19个人的电脑炸了，工作还能继续进行，数据不会丢。</p>
<p>当然了，为何总览古今中外，国家或文明的体制都是“集中式”呢(民主国家也得有个头头)？毕竟分布式不是那么好使。实际上，在Git的使用中，往往也有一个节点充当中央服务器。当然这只是为了方便，没了这中央服务器大家一样用。Github就是一个这样的中央服务器。</p>
<p>##接着说语言<br>现在就好理解了。</p>
<p>在这里，我将语言这一系统类比于分布式系统。暂且不考虑语言的差异，就笼统地说「语言」。</p>
<p>语言的知识储存于每一个地球上人类的大脑中，例如有一天发生了世界大战，全世界只活下来了一个人，那么我们可以认为这个人的大脑中储存了一份关于人类语言的知识。他可以再跟…等等，遇到一个BUG。</p>
<p>全世界只活下来了两个人，一男一女，我们叫他们亚当和夏娃。那么他们可以再跟自己的后代们教授语言的知识。这和Git的思路是一致的。</p>
<p>那么，语言这一系统存在中央服务器吗？我认为是存在的，但跟Git的中央服务器一样，只是为了方便和保险。比如<em>辞海</em>、<em>牛津大词典</em>等。但这种中央服务器是有缺陷的，它只能记录文字文化，而不能记录口语文化，更不能记录人类大脑中那最根本的「意义」。</p>
<p>分布式的系统中，除了储存，对信息的处理也是关键。因为分布式系统中的每个节点都有一定的计算能力，所以这就降低了信息传输的负担。只需很小的信道，传输很少的信息，令节点自行处理后就可具有巨大的效果。比如说「批发肯德基门」，我不会算这个的信息量，但应该没几个比特。这些信息进入到我的大脑后，我的大脑对这简短的信息进行「本地」处理，效果拔群。</p>
<p>计算信息量的公式大概长这样吧，也许吧。像不像熵的计算？我大物学这么渣，没好意思跟老师问-_-<br>$$<br>H = k * log(N)<br>$$</p>
<p>##编码和解码</p>
<p>还有一点。我大脑中所理解到的「丰富的意义」，正是店老板大脑中(近似)所想的。店老板的大脑通过这六个字，将他大脑中丰富的信息量传送到了我的大脑中。为什么？因为我们的大脑结构相似、所储存的内容(近似、在某种程度上)相似。也就意味着：思考原理近似、思考方式近似。比如说，我对我书桌说话，他解码不了我说的话。人类多多少少都能。</p>
<p>这大概就解释了为什么误解无处不在。毕竟我们大脑中所储存的「前提」不同，那么传输信息时、也即编码信息时，压缩量如此巨大，所损失的信息也是很多的。那么前提（也就是所谓的三观）不同的话，对信息进行解码的结果也就不同。大脑是编码器，也是解码器。信息的冗余度，决定了这编码和解码的容错性。冗余度越高，编码解码相差的后果就越轻微。</p>
<p>###举例1：信息压缩量太大（冗余太少）</p>
<p>我：我在北工大上学。</p>
<p>你：北京工业大学？北方工业大学？</p>
<p>###举例2：解码器不同。<br>我：听说美国某地区给女性预留了更宽的停车位。</p>
<p>甲：噢，挺好啊，造福女司机。</p>
<p>乙：你性别歧视是不是？</p>
<p>###举例3：解码时对编码方式的换位思考<br>场景1：长辈给我发来一个【微笑】表情</p>
<p>场景2：同龄人给我发来一个【微笑】表情</p>
<hr>
<p>把语言比作分布式系统，也就是说每个节点都承担了编码和解码的功能（这需要较大的计算量），而传输的效率很低，口语估计一秒也就传几个比特，所以计算量就更大了（巨大的压缩比）。</p>
<p>##模因？<br>模因也译作迷因，英文「Meme」.很有意思，我说不清，自行百度~</p>
<p>如果把语言视为模因，通俗地说把语言看成是「活的」，那毫无疑问语言选择了一种非常高明的生存方式————分布式。分布在(寄生在)人类的大脑中，并让人类本身在使用自己的过程中取得好处（人类的文明建立于语言之上）。而且只要还剩一个人类，甚至还剩一本「辞海」「牛津大词典」之类的，自己就不算灭绝。</p>
<p>想到《三体》和《EVA》的剧情了吗？</p>
<p>##小结</p>
<ul>
<li>生活中所使用的自然语言系统具有分布式系统的特征</li>
<li>大脑就是这个分布式系统中的节点</li>
<li>节点和节点之间的通讯手段就是语言（书面、口语）</li>
<li>大脑对信息的处理能力远强大于计算机</li>
<li>大脑对信息的储存能力远落后于计算机</li>
</ul>
<p>另外我有了一个模糊的想法：不论是编程、计算机技术、科学、人类文明本身乃至这个世界最本质的东西，都可以在某种层次和某种角度中理解为「信息的编码、传输和解码」。那么此时绕不开的就是意义。到底是先有意义还是先有信息？大概又是一个鸡生蛋的问题。</p>
<p>换个角度看鸡生蛋的问题，也许只是基因在周期性复制而已。那最早可复制的基因又是从哪来的呢？从随机中来？从意义中来？从信息中来？</p>
<p>太初有道，道与谁同在？</p>

          
        
      
    </div>

    <div>
      
    </div>

    <div>
      
    </div>

    <footer class="post-footer">
      

      

      
      
        <div class="post-eof"></div>
      
    </footer>
  </article>


    
      

  
  

  
  
  

  <article class="post post-type-normal " itemscope itemtype="http://schema.org/Article">

    
      <header class="post-header">

        
        
          <h1 class="post-title" itemprop="name headline">
            
            
              
                
                <a class="post-title-link" href="/2015/08/23/chong-xin-bu-shu-hexo/" itemprop="url">
                  将博客同步发布到天朝和美帝
                </a>
              
            
          </h1>
        

        <div class="post-meta">
          <span class="post-time">
            <span class="post-meta-item-icon">
              <i class="fa fa-calendar-o"></i>
            </span>
            <span class="post-meta-item-text">发表于</span>
            <time itemprop="dateCreated" datetime="2015-08-23T18:20:02+08:00" content="2015-08-23">
              2015-08-23
            </time>
          </span>

          

          
            
          

          

          
          

          
        </div>
      </header>
    


    <div class="post-body" itemprop="articleBody">

      
      

      
        
          
            <p>##干了三件事</p>
<ul>
<li>在Mac上安装Hexo</li>
<li>将博客同时部署到Github Page和Gitcafe Page</li>
<li>将域名分别绑定到了两个网站(海内、海外)</li>
</ul>
<p>##在Mac上安装Hexo<br>安装很容易，就和在Win上差不多。npm源是不是被半墙了？下载速度很慢，现在这网络环境，唉。</p>
<p>用Hexo进行各项操作时，命令基本都得加sudo，如果不加就会出错。</p>
<p>在用Git推送时，总是提示我SSH有错。反复查询后发现，不仅得把SSH公钥传到Github上，<strong>还得把SSH私钥加入到本机SSH客户端。</strong>但在Win上使用Git却没有这一步，可能是自动添加了吧，毕竟用的是msysgit集成环境。</p>
<p>##同时部署到两个网站<br>毕竟Github在美帝的地盘上，我们访问起来速度不好，曾经还一度被墙过。且听说百度对Github Pages的收录不好。所以打算同步在Github和Gitcafe上更新博客，毕竟他们都提供Page服务。毕竟Gitcafe在国内，既然已经备案了，那一定会遵纪守法嘛。</p>
<p>操作做法：打开Hexo根目录下的 <code>_config.yml</code> ,如下填写：<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div></pre></td><td class="code"><pre><div class="line">deploy:</div><div class="line">  type: git</div><div class="line">  message: &quot;&quot;</div><div class="line">  repo:</div><div class="line">    github: git@github.com:wangyufeng0615/wangyufeng0615.github.io.git</div><div class="line">    gitcafe: git@gitcafe.com:azzwacb9001/azzwacb9001.git,gitcafe-pages</div></pre></td></tr></table></figure></p>
<p>注意，我在github那一行后面没写分支，默认是master。</p>
<p>现在再使用<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">hexo d</div></pre></td></tr></table></figure></p>
<p>就可以同时推送博客到两个网站上了。如果是mac的话，不加配置的话，别忘了加<code>sudo</code></p>
<hr>
<p>不过刚才做了下ping测试，Gitcafe也不是很快。印象中以前都40多ms。<br><img src="http://7xku3h.com1.z0.glb.clouddn.com/15-8-23/73049177.jpg" alt=""><br>上为Gitcafe,下为Github</p>
<p>我觉得我进行了一次响亮的自行打脸。</p>
<p>##令同一个域名分流海内外流量<br>我想让<code>wangyufeng.org</code>这个域名，想让国内的流量访问到Gitcafe，海外的流量访问到Github，怎么做呢？</p>
<p>其实很容易，在DNS设置里如图：<br><img src="http://7xku3h.com1.z0.glb.clouddn.com/15-8-23/90310523.jpg" alt=""><br><strong>主机记录那里我改成了www，这样的话访问<code>wangyufeng.org</code>就可以自动被解析为<code>www.wangyufeng.org</code>，否则必需输入www。</strong></p>
<p>另外，无论是Github还是Gitcafe，都推荐使用<code>CNAME</code>记录。Gitcafe甚至必需使用CNAME，它说</p>
<blockquote>
<p>如果您的域名注册商管理界面不支持 CNAME 记录添加，可以使用 DNSPod 或 CloudFlare 等支持 CNAME 记录的第三方域名解析服务来管理您的域名。</p>
</blockquote>
<p>为什么呢？Github官网如是说：</p>
<blockquote>
<p>We strongly recommend that you use a custom subdomain for these reasons:</p>
<ul>
<li>It gives your GitHub Pages site the benefit of our Content Delivery Network.</li>
<li>It will not be affected by changes in the underlying IP addresses of GitHub’s servers.</li>
<li>Pages will load significantly faster because Denial of Service protection can be implemented more efficiently.</li>
</ul>
</blockquote>
<p>大意是</p>
<ul>
<li>有CDN给你加速</li>
<li>就算我们挪窝了你页面也能用</li>
<li>更好的DOS保护</li>
</ul>
<p>所以，如果不是弄这种流量的分流，正常情况下一条CNAME解析就足够了。<br>现在网上的绝大多数教程/帖子都是A记录，还有A记录和CNAME记录混用的。</p>
<p>这件事儿带给我的收获是，多看看官网的东西肯定没错。看网上的经验贴前也得注意发帖日子。</p>
<p>毕竟不是所有的东西都像C语言那样，(近似于)静静地待在角落里一动不动，一声不吭。</p>
<hr>
<p>如果大家对Hexo建博客感兴趣，不妨搜索一下<code>Github Hexo 博客</code>这样的关键字，教程非常多。很好玩。</p>

          
        
      
    </div>

    <div>
      
    </div>

    <div>
      
    </div>

    <footer class="post-footer">
      

      

      
      
        <div class="post-eof"></div>
      
    </footer>
  </article>


    
      

  
  

  
  
  

  <article class="post post-type-normal " itemscope itemtype="http://schema.org/Article">

    
      <header class="post-header">

        
        
          <h1 class="post-title" itemprop="name headline">
            
            
              
                
                <a class="post-title-link" href="/2015/08/20/ping-guo-de-yue-liang-bi-jiao-yuan/" itemprop="url">
                  苹果的月亮比较圆
                </a>
              
            
          </h1>
        

        <div class="post-meta">
          <span class="post-time">
            <span class="post-meta-item-icon">
              <i class="fa fa-calendar-o"></i>
            </span>
            <span class="post-meta-item-text">发表于</span>
            <time itemprop="dateCreated" datetime="2015-08-20T18:20:02+08:00" content="2015-08-20">
              2015-08-20
            </time>
          </span>

          
            <span class="post-category" >
              &nbsp; | &nbsp;
              <span class="post-meta-item-icon">
                <i class="fa fa-folder-o"></i>
              </span>
              <span class="post-meta-item-text">分类于</span>
              
                <span itemprop="about" itemscope itemtype="https://schema.org/Thing">
                  <a href="/categories/随感/" itemprop="url" rel="index">
                    <span itemprop="name">随感</span>
                  </a>
                </span>

                
                

              
            </span>
          

          
            
          

          

          
          

          
        </div>
      </header>
    


    <div class="post-body" itemprop="articleBody">

      
      

      
        
          
            <p>这是一篇关于双指滑动的一篇文章。</p>
<p>大学前的我一直是个 Windows 用户，Apple 的产品仅限于用过 Mac 台式机，是在八十中高中部，印象中还挺不好使的。</p>
<p>上大学后，入手一台 Thinkpad，我第一次用上了能双指滑动的触摸板。这台机器自带 Win8，大家也知道，Win8的双指滑动逻辑，是触摸屏的逻辑。也就是说，双指向下滑，屏幕向上走，就像是手指在屏幕上滑动一样。</p>
<p>都说 Win8 是面向触摸设备的 OS，对于我这种鼠标党来说自然是很难受了，后来升级了 Win8.1 倒还好些。对于双指滑动的逻辑，我倒从来没多想什么。</p>
<p>神奇的事情是这样的。</p>
<p>程序员们、知乎社区啥的，都说苹果大法好啊！苹果大法妙。一次偶然的机会，我用上了一台 Macbook Pro，<strong>我发现 Mac 的双指滑动模式和 Win 的相反</strong>！双指向下，屏幕就向下走，反之亦然。</p>
<p>当时我的想法是这样的：苹果的这个设计多好啊！多么符合人类的直觉啊！怪不得都说苹果好啊！一定是这种逻辑是对的！Windows 反人类！</p>
<p>有俗语“外国的月亮比较圆”，当时我的想法大概就是“苹果的月亮比较圆”吧。后来事实证明我还是 Too young, too simple, sometimes naive。</p>
<hr>
<p>有一回我装逼失败(当时在安装一啥东西，特别慢)，单手拎着 Thinkpad 就从知行楼出来了————果不其然，硬盘挂了。美食园旁边修电脑的小哥给我装了个 Win7，我惊奇地发现，<strong>Win7 的双指滑动逻辑跟 Mac 是一样的…</strong>这还不算啥，这两天我更加惊奇发现 Macbook Air（OS X Yosemite 10.10）上，<strong>双指滑动的逻辑又跟 Win8 一样了…触摸屏的滑动逻辑。</strong></p>
<p>我的两个设备，双指滑动的逻辑反过来了。</p>
<p>到底是谁的月亮比较圆？ :)</p>
<p>这件事儿给我提了个醒：不要随便比较好坏是非，要多想想，认清事实、找到自己认可的观点、加以自己的逻辑，试着推出结论。哪怕是把这个结论往舆论上靠（比如，苹果大法好），也不太应该随便舍弃中间的过程。</p>
<hr>
<p>至于为啥双指滑动这事儿， OS X 也变得像 Windows 一样…看来统一移动端设备的风格，还是比“符合直觉的设计”更重要吧 :)</p>

          
        
      
    </div>

    <div>
      
    </div>

    <div>
      
    </div>

    <footer class="post-footer">
      

      

      
      
        <div class="post-eof"></div>
      
    </footer>
  </article>


    
      

  
  

  
  
  

  <article class="post post-type-normal " itemscope itemtype="http://schema.org/Article">

    
      <header class="post-header">

        
        
          <h1 class="post-title" itemprop="name headline">
            
            
              
                
                <a class="post-title-link" href="/2015/08/19/cpp-learning-book/" itemprop="url">
                  学习 C++ 的书籍推荐和杂谈
                </a>
              
            
          </h1>
        

        <div class="post-meta">
          <span class="post-time">
            <span class="post-meta-item-icon">
              <i class="fa fa-calendar-o"></i>
            </span>
            <span class="post-meta-item-text">发表于</span>
            <time itemprop="dateCreated" datetime="2015-08-19T18:20:02+08:00" content="2015-08-19">
              2015-08-19
            </time>
          </span>

          
            <span class="post-category" >
              &nbsp; | &nbsp;
              <span class="post-meta-item-icon">
                <i class="fa fa-folder-o"></i>
              </span>
              <span class="post-meta-item-text">分类于</span>
              
                <span itemprop="about" itemscope itemtype="https://schema.org/Thing">
                  <a href="/categories/学习/" itemprop="url" rel="index">
                    <span itemprop="name">学习</span>
                  </a>
                </span>

                
                

              
            </span>
          

          
            
          

          

          
          

          
        </div>
      </header>
    


    <div class="post-body" itemprop="articleBody">

      
      

      
        
          
            <p>##课程安排<br>信安的朋友们请闷声围观，我知道你们上学期已经学完C++了…</p>
<p><img src="http://7xku3h.com1.z0.glb.clouddn.com/15-8-14/16965018.jpg" alt=""></p>
<p>这张图，是2014级计算机科学与技术专业，关于 C++ 的安排。亮点是“自学”，无数学长学姐告诉我们，“自学”就是“不用学”的意思。再加上这点可怜的学分，似乎 C++ 这门课自带忧伤属性。<em>那到底学不学啊？</em></p>
<p>##C++重要吗？<br>重要不重要总得有个依据，It depends.<br>开发游戏，C++可能很重要；做个网站，C++可能没什么用武之地。</p>
<p>那对于我们学生来说呢？我的个人看法是：</p>
<ul>
<li>这门语言本身对于我们来说，不太重要；</li>
<li>学习 C++ 的过程，很重要。</li>
</ul>
<p>###语言本身是什么意思？<br>请注意，是<strong>不太重要，但不是没有用。</strong></p>
<p>在我看来，C++ 的用武之地在减少。</p>
<ul>
<li>底层的部分，比如操作系统和单片机，大家更喜欢用C语言，Linux 坚持不用 C++ 重写。</li>
<li>大型的系统，现在 Java 似乎比较吃香，比如企业的后台系统，用 J2EE 的不少。</li>
<li>上面提到的做网站，前端就是一套 HTML+CSS+JavaScript，后端的 CGI 也没见还有用 C++ 的了。</li>
<li>科学领域，用 C/Python/R/Matlab 比较多，甚至还有老古董 FORTRAN，没见什么地方用 C++ 比较多。</li>
<li>就连做游戏，现在也是向脚本语言发展。C# 也在许多领域取代了 C++。君不见 Unity3D 都用上 C# 了？（舍友告诉我的，别打我）</li>
</ul>
<p>为什么会这样？我觉得这可能跟 C++ 发明者的性格有关系。Bjarne Stroustrup 觉得，不应该强加意志给程序员，所以 C++ 不强加任何意志给你，而这也就造就了它的缺陷。C++ 想要造一艘航空母舰，但它同时还想兼容 C 语言家庭作坊式的发动机。试问，除了 C++，还有哪个面向对象语言的程序员需要操心手动内存回收？</p>
<p>###过程很重要？<br>对，虽然 C++ 背负着历史的包袱走过这么多年，受到了一些阻碍，<strong>但也不妨碍我们学习它。</strong>好比我们之中，哪怕是从事 IT 行业的同学，恐怕90%以上的人都不会再主要使用 C 语言进行工作，但这不妨碍我们学习 C 语言的必要性。</p>
<p>“数据结构”是咱们专业的重头戏，那数据结构这门课主要用什么语言来描述和学习呢？依我之愚见，C++ 是最适合的语言。C 语言太原始，不方便。而到了 Java 就已经封闭了”指针”等“危险品”，更别提那些脚本语言了。而 C++ 能兼顾手工的细节和自动化的便捷。</p>
<p>计科的朋友们，咱们是大二下学期学数据结构这门课。那如果大二上没咋学 C++，几乎相当于大二下得再自学一遍。做 C 课设时觉得链表存在困难的朋友，请一定留心。</p>
<p>C++ 向下兼容 C，也就是说 C 是 C++ 语言的子集。那么我们在 C++ 语言中可以很方便地用 C 语言的写法，从底层来学习数据结构和算法的原理。<strong>但这种兼容，对工程来说没有好处，</strong>大概只适合我们用来学习吧。</p>
<p>同 Java 一样，C++ 也是编译型的面向对象语言。我们学 C++，同时也能学习面向对象的思维。也许当我们都忘记了 C++ 的具体用法时，那些面向对象的思维模式还能够帮到我们。虽然函数式编程很火，但面向对象编程，想必一时半会也不会被替代。</p>
<p>###所以呢？<br>好好学C++ 吧，不会吃亏的。我的建议是别抠细节，用心感受，学完以后把细节都忘了才好。</p>
<p>毕竟以后我们的课程里就再也没有编程语言了，再学不学就靠自觉了。</p>
<p>还有啊…可能用 C++ 作为开发语言的前辈们该不高兴了。C++当然用途还是大大的有，比如我昨天给秘密花园填色用的 OpenCV 库，就是用 C++ 编写的。然而也不能回避的是，这个库已经支持 Java 和 Python 的接口了…</p>
<p>##书籍<br>首推</p>
<blockquote>
<p>C++ Primer Plus<br><img src="http://7xku3h.com1.z0.glb.clouddn.com/15-8-14/84722053.jpg" alt=""></p>
</blockquote>
<p>这书难度不大，适合初学入门，虽然有点厚，因为讲的细。我的个人建议是别太抠细节，第一遍先浏览一遍，对整体有个概念。第二遍仔细看的时候再敲代码。否则进度会很慢，就失去了看下去的动力了（比如我= =）。</p>
<p>觉得学有余力的请买 </p>
<blockquote>
<p>C++ Primer </p>
</blockquote>
<p>没有 Plus，难度比那本大。</p>
<p>有人推荐说 </p>
<blockquote>
<p>Thinking in C++</p>
</blockquote>
<p>也不错，我没看过。但 Thinking in Java 确实是一本好书。</p>
<p>不太推荐买谭浩强老师的教材。<strong>极不推荐买各种奇怪出版社的“速成”教材</strong>，那些书一般都是东拼西凑出来的，感觉不像是在说人话。</p>
<p>一般咱们专业的书，</p>
<ul>
<li>机械工业出版社</li>
<li>人民邮电出版社</li>
<li>清华大学出版社</li>
<li>电子工业出版社</li>
</ul>
<p>都挺靠谱的。</p>
<p>就酱吧，共勉。</p>

          
        
      
    </div>

    <div>
      
    </div>

    <div>
      
    </div>

    <footer class="post-footer">
      

      

      
      
        <div class="post-eof"></div>
      
    </footer>
  </article>


    
      

  
  

  
  
  

  <article class="post post-type-normal " itemscope itemtype="http://schema.org/Article">

    
      <header class="post-header">

        
        
          <h1 class="post-title" itemprop="name headline">
            
            
              
                
                <a class="post-title-link" href="/2015/08/15/auto-colour-secret-garden/" itemprop="url">
                  给秘密花园自动上色
                </a>
              
            
          </h1>
        

        <div class="post-meta">
          <span class="post-time">
            <span class="post-meta-item-icon">
              <i class="fa fa-calendar-o"></i>
            </span>
            <span class="post-meta-item-text">发表于</span>
            <time itemprop="dateCreated" datetime="2015-08-15T18:20:02+08:00" content="2015-08-15">
              2015-08-15
            </time>
          </span>

          
            <span class="post-category" >
              &nbsp; | &nbsp;
              <span class="post-meta-item-icon">
                <i class="fa fa-folder-o"></i>
              </span>
              <span class="post-meta-item-text">分类于</span>
              
                <span itemprop="about" itemscope itemtype="https://schema.org/Thing">
                  <a href="/categories/学习/" itemprop="url" rel="index">
                    <span itemprop="name">学习</span>
                  </a>
                </span>

                
                

              
            </span>
          

          
            
          

          

          
          

          
        </div>
      </header>
    


    <div class="post-body" itemprop="articleBody">

      
      

      
        
          
            <p><a href="http://www.zhihu.com/question/34260632" target="_blank" rel="external">http://www.zhihu.com/question/34260632</a><br>看了这个知乎问题，心血来潮…</p>
<p>Talk is cheap, show you the code.<br><a href="https://github.com/wangyufeng0615/AutoColourSecretGarden/blob/master/AutoColourSecretGarden/%E6%BA%90.cpp" target="_blank" rel="external">https://github.com/wangyufeng0615/AutoColourSecretGarden/blob/master/AutoColourSecretGarden/%E6%BA%90.cpp</a></p>
<p>其实内容挺简单的，用opencv库真的好方便。就是把 Mat.at 没查 API，导致耽误了好多个小时的时间。</p>
<p>目前可以实现随机上色，下一步打算：</p>
<ul>
<li>对有缺陷的图也能完美上色（线条没封闭好的）</li>
<li>智能识别填充区域的大小/形状，针对性上色</li>
</ul>
<p>啊，我感觉我看到了计算机视觉和模式识别的新世界大门了。</p>
<p><img src="http://7xku3h.com1.z0.glb.clouddn.com/15-8-13/7738763.jpg" alt=""><br><img src="http://7xku3h.com1.z0.glb.clouddn.com/15-8-13/71282498.jpg" alt=""><br><img src="http://7xku3h.com1.z0.glb.clouddn.com/15-8-13/13388884.jpg" alt=""><br><img src="http://7xku3h.com1.z0.glb.clouddn.com/15-8-13/89491187.jpg" alt=""><br><img src="http://7xku3h.com1.z0.glb.clouddn.com/15-8-13/21273418.jpg" alt=""></p>

          
        
      
    </div>

    <div>
      
    </div>

    <div>
      
    </div>

    <footer class="post-footer">
      

      

      
      
        <div class="post-eof"></div>
      
    </footer>
  </article>


    
  </section>

  
  <nav class="pagination">
    <a class="extend prev" rel="prev" href="/page/2/"><i class="fa fa-angle-left"></i></a><a class="page-number" href="/">1</a><a class="page-number" href="/page/2/">2</a><span class="page-number current">3</span><a class="page-number" href="/page/4/">4</a><span class="space">&hellip;</span><a class="page-number" href="/page/6/">6</a><a class="extend next" rel="next" href="/page/4/"><i class="fa fa-angle-right"></i></a>
  </nav>



          </div>
          


          

        </div>
        
          
  
  <div class="sidebar-toggle">
    <div class="sidebar-toggle-line-wrap">
      <span class="sidebar-toggle-line sidebar-toggle-line-first"></span>
      <span class="sidebar-toggle-line sidebar-toggle-line-middle"></span>
      <span class="sidebar-toggle-line sidebar-toggle-line-last"></span>
    </div>
  </div>

  <aside id="sidebar" class="sidebar">
    <div class="sidebar-inner">

      

      

      <section class="site-overview sidebar-panel  sidebar-panel-active ">
        <div class="site-author motion-element" itemprop="author" itemscope itemtype="http://schema.org/Person">
          <img class="site-author-image" itemprop="image"
               src="/images/avatar.gif"
               alt="Alan" />
          <p class="site-author-name" itemprop="name">Alan</p>
          <p class="site-description motion-element" itemprop="description">Alan Wang's personal blog.</p>
        </div>
        <nav class="site-state motion-element">
          <div class="site-state-item site-state-posts">
            <a href="/archives">
              <span class="site-state-item-count">57</span>
              <span class="site-state-item-name">日志</span>
            </a>
          </div>

          
            <div class="site-state-item site-state-categories">
              
                <span class="site-state-item-count">9</span>
                <span class="site-state-item-name">分类</span>
              
            </div>
          

          
            <div class="site-state-item site-state-tags">
              
                <span class="site-state-item-count">4</span>
                <span class="site-state-item-name">标签</span>
              
            </div>
          

        </nav>

        

        <div class="links-of-author motion-element">
          
        </div>

        
        

        
        

      </section>

      

    </div>
  </aside>


        
      </div>
    </main>

    <footer id="footer" class="footer">
      <div class="footer-inner">
        <div class="copyright" >
  
  &copy; 
  <span itemprop="copyrightYear">2016</span>
  <span class="with-love">
    <i class="fa fa-heart"></i>
  </span>
  <span class="author" itemprop="copyrightHolder">Alan</span>
</div>

<div class="powered-by">
  Powered by <a class="theme-link" href="https://hexo.io">Hexo</a> 
</div>

<div class="theme-info">
  主题 -
  <a class="theme-link" href="https://github.com/iissnan/hexo-theme-next">
    NexT.Pisces
  </a>
</div>

        

        
      </div>
    </footer>

    <div class="back-to-top">
      <i class="fa fa-arrow-up"></i>
    </div>
  </div>

  

<script type="text/javascript">
  if (Object.prototype.toString.call(window.Promise) !== '[object Function]') {
    window.Promise = null;
  }
</script>









  



  
  <script type="text/javascript" src="/vendors/jquery/index.js?v=2.1.3"></script>

  
  <script type="text/javascript" src="/vendors/fastclick/lib/fastclick.min.js?v=1.0.6"></script>

  
  <script type="text/javascript" src="/vendors/jquery_lazyload/jquery.lazyload.js?v=1.9.7"></script>

  
  <script type="text/javascript" src="/vendors/velocity/velocity.min.js?v=1.2.1"></script>

  
  <script type="text/javascript" src="/vendors/velocity/velocity.ui.min.js?v=1.2.1"></script>

  
  <script type="text/javascript" src="/vendors/fancybox/source/jquery.fancybox.pack.js?v=2.1.5"></script>


  


  <script type="text/javascript" src="/js/src/utils.js?v=5.0.1"></script>

  <script type="text/javascript" src="/js/src/motion.js?v=5.0.1"></script>



  
  


  <script type="text/javascript" src="/js/src/affix.js?v=5.0.1"></script>

  <script type="text/javascript" src="/js/src/schemes/pisces.js?v=5.0.1"></script>



  

  


  <script type="text/javascript" src="/js/src/bootstrap.js?v=5.0.1"></script>



  



  




  
  

  

  

  

</body>
</html>
